package com.chenjt.jvm.second.one_classDetails;

/**
 * 注释：
 * 成员变量（非静态的）的赋值过程
 * 1.默认初始化
 * 2.显示初始化/代码中初始化
 * 3.构造器中初始化
 * 4.有了对象之后，可以”对象.属性“或”对象.方法“的
 *      方式对成员变量进行赋值
 *
 * @author chenjt
 * @date 2025/6/23 10:21
 */

class Father{
    int x = 10;
    public Father(){
        this.print();
        x = 20;
    }
    public void print(){
        System.out.println("Father.x = " + x);
    }
}

class Son extends Father{
    int x = 30;
    public Son(){
        this.print();
        x = 40;
    }
    public void print(){
        System.out.println("Son.x = " + x);
    }
}


public class SonTest {

    public static void main(String[] args) {
        /**
         * 1.先执行父类的init（father的构造方法）
         * 2.父类构造方法中this.print()执行的是子类的print()方法，
         *   这时候还未初始化，x=0
         * 3.然后执行当前类（Son）的构造方法，这时候x已经
         *   初始化完成，x=30
         * 4.f.x调用的是父类的x，这时候父类构造方法已执行完，
         *   x=20
         */
        Father f = new Son();
        System.out.println("f.x = " + f.x);
    }

}
